package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSON;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Test;

import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;

/**
 * @Description :
 * @Author : YTY
 * @Date : 2021-01-16 16:09
 */
public class StreamVs {

    /**
     * 1 想看看购物车中都有什么商品
     * 2 图书类商品都不买
     * 3 其余的商品中买两件最贵的
     * 4 只需要两件商品的名称和总价
     */

    @Test
    public void NewCartHandle() {

        AtomicReference<Double> money =
                new AtomicReference<>(0.0);

        List<String> resultSkuNameList = CartService.getCartSkuList()
                .stream()
                /**
                 * 1. 打印商品信息
                 */
                .peek(sku -> System.out.println(
                        JSON.toJSONString(sku, true)
                ))
                /**
                 * 2. 过滤掉所有图书类商品
                 */
                .filter(sku -> !SkuCategoryEnum.BOOKS.equals(
                        sku.getSkuCategory()
                ))
                /**
                 * 3. 排序
                 */
                .sorted(comparing(Sku::getTotalPrice).reversed())
                /**
                 * 4. TOP2
                 */
                .limit(2)
                /**
                 * 5. 累加商品总金额
                 */
                .peek(sku -> money.set(money.get() + sku.getTotalPrice()))
                /**
                 * 6. 获取商品名称
                 */
                .map(Sku::getSkuName)
                /**
                 * 7. 收集结果
                 */
                .collect(toList());

                /**
                 * 打印输入结果
                 */
                System.out.println(
                        JSON.toJSONString(resultSkuNameList, true));
                System.out.println("商品总价：" + money.get());


    }
}
